package com.fruit.logistics.sf.pojo.order;

import com.joe.utils.parse.xml.XmlNode;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 顺丰发快递请求报文中的Order
 *
 * @author joe
 * @version 2018.02.05 15:47
 */
@Data
public class SFOrder {
    /**
     * 客户订单号
     */
    @XmlNode(isAttribute = true, attributeName = "orderid")
    private String orderid;
    /**
     * 顺丰运单号，一个订单只能有一个母单号，如果是子母单的情况，以半角逗号分隔，主单号在第一个位置，如“755
     * 123456789,001123456789,002123456789”，对于路由推送注册，此字段为必填。
     */
    @XmlNode(isAttribute = true, attributeName = "mailno")
    private String mailno;
    /**
     * 是否要求返回顺丰运单号：
     * <p>
     * 1：要求
     * 其它为不要求
     */
    @XmlNode(isAttribute = true, attributeName = "is_gen_bill_no")
    private Integer isGenBillNo;
    /**
     * 寄件方公司名称，如果需要生成电子运单，则为必填。
     */
    @XmlNode(isAttribute = true, attributeName = "j_company")
    private String jCompany;
    /**
     * 寄件方联系人，如果需要生成电子运单，则为必填。
     */
    @XmlNode(isAttribute = true, attributeName = "j_contact")
    private String jContact;
    /**
     * 寄件方联系电话，如果需要生成电子运单，则为必填。
     */
    @XmlNode(isAttribute = true, attributeName = "j_tel")
    private String jTel;
    /**
     * 寄件方手机
     */
    @XmlNode(isAttribute = true, attributeName = "j_mobile")
    private String jMobile;
    /**
     * 寄件方国家/城市代码，如果是跨境件，则此字段为必填。
     */
    @XmlNode(isAttribute = true, attributeName = "j_shippercode")
    private String jShippercode;
    /**
     * 寄方国家
     */
    @XmlNode(isAttribute = true, attributeName = "j_country")
    private String jCountry;
    /**
     * 寄件方所在省份
     * <p>
     * 字段填写要求：必须是标准的省名称称谓 如：广东省，如果是直辖市，请直接传北京、上海等。
     */
    @XmlNode(isAttribute = true, attributeName = "j_province")
    private String jProvince;
    /**
     * 寄件方所在城市名称，字段填写要求：必须是标准的城市称谓 如：深圳市。
     */
    @XmlNode(isAttribute = true, attributeName = "j_city")
    private String jCity;
    /**
     * 寄件人所在县/区，必须是标准的县/区称谓，示例：“福田区”
     */
    @XmlNode(isAttribute = true, attributeName = "j_county")
    private String jCounty;
    /**
     * 寄件方详细地址，包括省市区，示例：“广东省深圳市福田区新洲十一街万基商务大厦10楼” ，如果需要
     * 生成电子运单，则为必填。
     */
    @XmlNode(isAttribute = true, attributeName = "j_address")
    private String jAddress;
    /**
     * 寄方邮编，跨境件必填（中国大陆，港澳台互寄除外）。
     */
    @XmlNode(isAttribute = true, attributeName = "j_post_code")
    private String jPostCode;
    /**
     * 到件方公司名称
     */
    @XmlNode(isAttribute = true, attributeName = "d_company")
    private String dCompany;
    /**
     * 到件方联系人
     */
    @XmlNode(isAttribute = true, attributeName = "d_contact")
    private String dContact;
    /**
     * 到件方联系电话
     */
    @XmlNode(isAttribute = true, attributeName = "d_tel")
    private String dTel;
    /**
     * 到件方手机
     */
    @XmlNode(isAttribute = true, attributeName = "dMobile")
    private String dMobile;
    /**
     * 到件方代码，如果是跨境件，则要传这个字段，用于表示到方国家的城市。如果此国家整体是以代理商来提供服
     * 务的，则此字段可能需要传国家编码。具体商务沟通中双方约定。
     */
    @XmlNode(isAttribute = true, attributeName = "d_deliverycode")
    private String dDeliverycode;
    /**
     * 到方国家
     */
    @XmlNode(isAttribute = true, attributeName = "d_country")
    private String dCountry;
    /**
     * 到件方所在省份，必须是标准的省名称称谓 如：广东省，如果是直辖市，请直接传北京、上海等。如果此字
     * 段与d_city字段都有值，系统则直接使用这两个值而不是通过对d_address进行地址识别获取。为避免地址识
     * 别不成功的风险，建议传输此字段。
     */
    @XmlNode(isAttribute = true, attributeName = "d_province")
    private String dProvince;
    /**
     * 到件方所在城市名称，必须是标准的城市称谓 如：深圳市，如果是直辖市，请直接传北京（或北京市）、上海（或上
     * 海市）等。如果此字段与d_province字段都有值，顺丰系统则直接使用这两个值而不是对d_address进行地址识别获
     * 取。为避免地址识别不成功的风险，建议传输此字段。
     */
    @XmlNode(isAttribute = true, attributeName = "d_city")
    private String dCity;
    /**
     * 到件方所在县/区，必须是标准的县/区称谓，示例：“福田区”。
     */
    @XmlNode(isAttribute = true, attributeName = "d_county")
    private String dCounty;
    /**
     * 到件方详细地址，如果不传输d_province/d_city字段，此详细地址需包含省市信息，以提高地址识别的成功率，示
     * 例：“广东省深圳市福田区新洲十一街万基商务大厦10楼”。
     */
    @XmlNode(isAttribute = true, attributeName = "d_address")
    private String dAddress;
    /**
     * 到方邮编，跨境件必填（中国大陆，港澳台互寄除外）。
     */
    @XmlNode(isAttribute = true, attributeName = "d_post_code")
    private String dPostCode;
    /**
     * 顺丰月结卡号
     */
    @XmlNode(isAttribute = true, attributeName = "custid")
    private String custid;
    /**
     * 付款方式：
     * <p>
     * 1:寄方付
     * 2:收方付
     * 3:第三方付
     */
    @XmlNode(isAttribute = true, attributeName = "pay_method")
    private Byte payMethod;
    /**
     * 快件产品类别，详见附录《快件产品类别表》，只有在商务上与顺丰约定的类别方可使用。
     * <p>
     * 1是标准快递，2是顺丰特惠，默认1
     */
    @XmlNode(isAttribute = true, attributeName = "express_type")
    private String expressType;
    /**
     * 包裹数，一个包裹对应一个运单号，如果是大于1个包裹，则返回则按照子母件的方式返回母运单号和子运单号。
     */
    @XmlNode(isAttribute = true, attributeName = "parcel_quantity")
    private Byte parcelQuantity;
    /**
     * 客户订单货物总长，单位厘米，精确到小数点后3位，包含子母件。
     */
    @XmlNode(isAttribute = true, attributeName = "cargo_length")
    private BigDecimal cargoLength;
    /**
     * 客户订单货物总宽，单位厘米，精确到小数点后3位，包含子母件。
     */
    @XmlNode(isAttribute = true, attributeName = "cargo_width")
    private BigDecimal cargoWidth;
    /**
     * 客户订单货物总高，单位厘米，精确到小数点后3位，包含子母件。
     */
    @XmlNode(isAttribute = true, attributeName = "cargo_height")
    private BigDecimal cargoHeight;
    /**
     * 订单货物总体积，单位立方厘米，精确到小数点后3位，会用于计抛（是否计抛具体商务沟通中双方约定）。
     */
    @XmlNode(isAttribute = true, attributeName = "volume")
    private BigDecimal volume;
    /**
     * 订单货物总重量，包含子母件，单位千克，精确到小数点后3位，如果提供此值，必须>0 。
     */
    @XmlNode(isAttribute = true, attributeName = "cargo_total_weight")
    private BigDecimal cargoTotalWeight;
    /**
     * 客户订单货物总声明价值，包含子母件，精确到小数点后3位。如果是跨境件，则必填。
     */
    @XmlNode(isAttribute = true, attributeName = "declared_value")
    private BigDecimal declaredValue;
    /**
     * 货物声明价值币别，支持以下值：
     * <p>
     * CNY: 人民币
     * <p>
     * HKD: 港币
     * <p>
     * USD: 美元
     * <p>
     * NTD: 新台币
     * <p>
     * RUB: 卢布
     * <p>
     * EUR: 欧元
     * <p>
     * MOP: 澳门元
     * <p>
     * SGD: 新元
     * <p>
     * JPY: 日元
     * <p>
     * KRW: 韩元
     * <p>
     * MYR: 马币
     * <p>
     * VND: 越南盾
     * <p>
     * THB: 泰铢
     * <p>
     * AUD: 澳大利亚元
     * <p>
     * MNT: 图格里克
     * <p>
     * 跨境件报关需要填写
     */
    @XmlNode(isAttribute = true, attributeName = "declared_value_currency")
    private String declaredValueCurrency;
    /**
     * 报关批次
     */
    @XmlNode(isAttribute = true, attributeName = "customs_batchs")
    private String customsBatchs;
    /**
     * 要求上门取件开始时间，格式：YYYY-MM-DD HH24:MM:SS，示例：2012-7-30 09:30:00。
     */
    @XmlNode(isAttribute = true, attributeName = "sendstarttime")
    private String sendstarttime;
    /**
     * 是否要求通过是否手持终端通知顺丰收派员收件：
     * <p>
     * 1：要求
     * 其它为不要求
     */
    @XmlNode(isAttribute = true, attributeName = "is_docall")
    private Byte isDocall;
    /**
     * 是否要求签回单号：
     * <p>
     * 1：要求
     * 其它为不要求
     */
    @XmlNode(isAttribute = true, attributeName = "need_return_tracking_no")
    private Byte needReturnTrackingNo;
    /**
     * 顺丰签回单服务运单号
     */
    @XmlNode(isAttribute = true, attributeName = "return_tracking")
    private String returnTracking;
    /**
     * 收件人税号
     */
    @XmlNode(isAttribute = true, attributeName = "d_tax_no")
    private String dTaxNo;
    /**
     * 税金付款方式：
     * <p>
     * 1：寄付
     * 2：到付
     */
    @XmlNode(isAttribute = true, attributeName = "tax_pay_type")
    private String taxPayType;
    /**
     * 税金结算账号
     */
    @XmlNode(isAttribute = true, attributeName = "tax_set_accounts")
    private String taxSetAccounts;
    /**
     * 电商原始订单号
     */
    @XmlNode(isAttribute = true, attributeName = "original_number")
    private String originalNumber;
    /**
     * 支付工具
     */
    @XmlNode(isAttribute = true, attributeName = "payment_tool")
    private String paymentTool;
    /**
     * 支付号码
     */
    @XmlNode(isAttribute = true, attributeName = "payment_number")
    private String paymentNumber;
    /**
     * 商品编号
     */
    @XmlNode(isAttribute = true, attributeName = "goods_code")
    private String goodsCode;
    /**
     * 头程运单号
     */
    @XmlNode(isAttribute = true, attributeName = "in_process_waybill_no")
    private String inProcessWaybillNo;
    /**
     * 货物品牌
     */
    @XmlNode(isAttribute = true, attributeName = "brand")
    private String brand;
    /**
     * 货物规格型号
     */
    @XmlNode(isAttribute = true, attributeName = "specifications")
    private String specifications;
    /**
     * 温度范围类型，当express_type为12医药温控件时必填：
     * <p>
     * 1为冷藏
     * 3为冷冻
     */
    @XmlNode(isAttribute = true, attributeName = "temp_range")
    private Byte tempRange;
    /**
     * 客户订单下单人姓名
     */
    @XmlNode(isAttribute = true, attributeName = "order_name")
    private String orderName;
    /**
     * 客户订单下单人证件类型
     */
    @XmlNode(isAttribute = true, attributeName = "order_cert_type")
    private String orderCertType;
    /**
     * 客户订单下单人证件号
     */
    @XmlNode(isAttribute = true, attributeName = "order_cert_no")
    private String orderCertNo;
    /**
     * 客户订单来源（对于平台类客户，如果需要在订单中区分订单来源，则可使用此字段）
     */
    @XmlNode(isAttribute = true, attributeName = "order_source")
    private String orderSource;
    /**
     * 业务模板编码，业务模板指顺丰系统针对客户业务需求配置的一套接口处理逻辑，一个接入编码可对应多个业务模板。
     */
    @XmlNode(isAttribute = true, attributeName = "template")
    private String template;
    /**
     * 备注
     */
    @XmlNode(isAttribute = true, attributeName = "remark")
    private String remark;
    /**
     * 快件自取；1表示客户同意快件自取；非1表示客户不同意快件自取
     */
    @XmlNode(isAttribute = true, attributeName = "oneself_pickup_flg")
    private Byte oneselfPickupFlg;
    /**
     * 订单数据分发的系统编码
     */
    @XmlNode(isAttribute = true, attributeName = "dispatch_sys")
    private String dispatchSys;
    /**
     * 筛单特殊字段(此字段数据库中查询不到)
     */
    @XmlNode(isAttribute = true, attributeName = "filter_field")
    private String filterField;
    /**
     * 商品总净重
     */
    @XmlNode(isAttribute = true, attributeName = "total_net_weight")
    private String totalNetWeight;
    @XmlNode(name = "Cargo")
    private Cargo cargo;
}
